package com.unitd.scheduler.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @desc 自定义注解类, 用于标注该类为线程Job类,
 * 使用方法为在需要使用的类前面加上 @ScheduleConf(cronExpr="0/30 * * * * ?",jobName="demoTask",executeOnStarted = true) 类似的代码
 * 然后在spring的配置文件中,配置 scanPackages:将扫描指定包下面 所有标注了 @ScheduleConf 注解的类,并依据规则将该Job注册成任务
 * @filename ScheduleConf.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2016/10/14
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface ScheduleConf {

	/**
	 * @desc Job任务名称(建议按照Java编码规范定义的名称)
	 * @return 定时任务的名称
	 */
	String jobName();

	/**
	 * @desc 定时器的执行时间表达式, 按照schedule的规则来定义(比如: 0/30 * * * * ?)
	 * @return 定时串
	 */
	String cronExpr();

	/**
	 * @desc 是否启动立即执行一次,默认否
	 * @return  boolean
	 */
	boolean executeOnStarted() default false;

	/**
	 * @desc 定时任务重试次数
	 * @return 重试次数, 默认不重试
	 */
	int retries() default 0;
}